//1.二分比较nums[right]
/*
nums[left]不行，比如[1,2,4,5,7,0],左右两边的值都小于
*/
class Solution {
public:
    int findMin(vector<int>& nums) {
        int left = 0;
        int right = nums.size() - 1;
        
        while (left < right) {
            // 计算中间位置，避免溢出
            int mid = left + (right - left) / 2;

            // 情况①：中点值大于右边界值，说明最小值在右半部分
            if (nums[mid] > nums[right]) {
               
                left = mid + 1;
            }
            // 情况②：中点值小于右边界值，说明最小值在左半部分（包括 mid）
            else if (nums[mid] < nums[right]) {
                
                right = mid;
            }
        }

        // 循环结束时，left == right，指向最小值
        return nums[left];
    }
};
